HttpSecurity এবং WebSecurityConfigurerAdapter ব্যবহার

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Spring Security এর Basic Authentication
149

Spring Security-এর মূল অংশ হলো HTTP স্তরে নিরাপত্তা নিশ্চিত করা। এই ক্ষেত্রে HttpSecurity এবং WebSecurityConfigurerAdapter ব্যবহৃত হয়।


WebSecurityConfigurerAdapter

Spring Security-তে WebSecurityConfigurerAdapter ছিল একটি প্রধান ক্লাস যা কাস্টম সিকিউরিটি কনফিগারেশন তৈরির জন্য ব্যবহৃত হত। তবে, Spring Security 5.7.0 থেকে WebSecurityConfigurerAdapter ডিপ্রিকেটেড হয়েছে। এর পরিবর্তে, এখন SecurityFilterChain ব্যবহার করা হয়।

যদিও WebSecurityConfigurerAdapter পুরোনো, এটি এখনও অনেক প্রকল্পে ব্যবহৃত হয়। এখানে আমরা WebSecurityConfigurerAdapter এবং এর আধুনিক বিকল্প HttpSecurity নিয়ে আলোচনা করব।


WebSecurityConfigurerAdapter ব্যবহার (Deprecated)

১. Maven Dependency যোগ করা

Spring Security ডিপেনডেন্সি যুক্ত করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

২. WebSecurityConfigurerAdapter ক্লাস তৈরি

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll() // Public endpoints
                .antMatchers("/admin/**").hasRole("ADMIN") // Admin role only
                .anyRequest().authenticated() // All other requests
            .and()
            .formLogin()
                .loginPage("/login").permitAll() // Custom login page
            .and()
            .logout()
                .permitAll();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("admin")
            .password("{noop}admin123") // {noop} indicates no password encoding
            .roles("ADMIN")
            .and()
            .withUser("user")
            .password("{noop}user123")
            .roles("USER");
    }
}

HttpSecurity ব্যবহার (Modern Approach)

Spring Security 5.7.0 থেকে SecurityFilterChain ব্যবহার করার পরামর্শ দেওয়া হয়। নিচে HttpSecurity এর আধুনিক ব্যবহার দেখানো হলো।

১. Maven Dependency যোগ করা

Spring Security এর ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

২. SecurityFilterChain এবং HttpSecurity ব্যবহার

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll() // Public endpoints
                .requestMatchers("/admin/**").hasRole("ADMIN") // Admin role only
                .anyRequest().authenticated() // All other requests
            )
            .formLogin(form -> form
                .loginPage("/login") // Custom login page
                .permitAll()
            )
            .logout(logout -> logout
                .permitAll()
            );

        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

৩. In-Memory Authentication ব্যবহার

Spring Boot অ্যাপ্লিকেশন চালানোর সময় In-Memory Authentication যুক্ত করা যায়:

@Bean
public InMemoryUserDetailsManager userDetailsService() {
    return new InMemoryUserDetailsManager(
        User.withUsername("admin")
            .password(passwordEncoder().encode("admin123"))
            .roles("ADMIN")
            .build(),
        User.withUsername("user")
            .password(passwordEncoder().encode("user123"))
            .roles("USER")
            .build()
    );
}

HttpSecurity-এর গুরুত্বপূর্ণ বৈশিষ্ট্য

১. Authentication

Authentication নিশ্চিত করতে HttpSecurity ব্যবহার করা হয়।

http
    .authorizeHttpRequests(auth -> auth
        .anyRequest().authenticated()
    )
    .formLogin()
    .httpBasic();

২. Authorization

Authorization এর মাধ্যমে নির্ধারণ করা হয় কোন ব্যবহারকারী কী অ্যাক্সেস করতে পারবে।

http
    .authorizeHttpRequests(auth -> auth
        .requestMatchers("/admin/**").hasRole("ADMIN")
        .requestMatchers("/user/**").hasAnyRole("USER", "ADMIN")
        .anyRequest().authenticated()
    );

৩. CSRF Protection

CSRF আক্রমণ প্রতিরোধ করতে HttpSecurity ডিফল্টভাবে সক্রিয় করে।

http.csrf().disable(); // Disable CSRF (not recommended for production)

৪. Custom Login Page

http.formLogin()
    .loginPage("/custom-login")
    .permitAll();

৫. Logout Configuration

http.logout()
    .logoutUrl("/custom-logout")
    .logoutSuccessUrl("/login?logout")
    .permitAll();

WebSecurityConfigurerAdapter এবং HttpSecurity-এর তুলনা

বৈশিষ্ট্যWebSecurityConfigurerAdapterHttpSecurity with SecurityFilterChain
স্থিতিDeprecated in Spring Security 5.7Recommended for new applications
কাস্টমাইজেশন সহজতাএকক ক্লাসে সব কিছু ব্যবস্থাপনাক্লিনার এবং মডুলার কাঠামো
মডিউলারিটিকম মডিউলারঅধিক মডিউলার
প্রযুক্তি সমর্থনSpring Security এর পুরোনো সংস্করণSpring Security 5.7 এবং পরবর্তী সংস্করণ

উপসংহার

Spring Security-তে HttpSecurity এবং WebSecurityConfigurerAdapter নিরাপত্তা নিশ্চিত করার জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে। WebSecurityConfigurerAdapter এখন ডিপ্রিকেটেড হওয়ায়, SecurityFilterChain এবং HttpSecurity ব্যবহার করার পরামর্শ দেওয়া হয়।

আপনার প্রয়োজন অনুযায়ী উদাহরণ বা সাহায্য চাইলে জানাতে পারেন!

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...